const { createGoodsService, deleteGoodsByProductIdService, updateGoodsService, getGoodsService } = require('../service/goodsService.js')
const { userRegisterError } = require('../constant/err.type')

class GoodsController {
    // 新增
    async createGoods(ctx, next) {
        const { productName, quantity, price } = ctx.request.body

        try {
            const res = await createGoodsService({ productName, quantity, price })

            ctx.body = {
                code: 0,
                data: res,
                message: 'success'
            }
        } catch (error) {
            console.log(err)
            ctx.app.emit('error', userRegisterError, ctx)
        }

    }

    // 删除
    async deleteGoodsByProductId(ctx) {
        const { productId } = ctx.query
        if (!productId) return

        try {
            const res = await deleteGoodsByProductIdService({ productId })

            ctx.body = {
                code: 0,
                message: 'success',
                data: res
            }
        } catch (error) {
            ctx.app.emit('error', userRegisterError, ctx)
        }
    }

    // 更新
    async updateGoods(ctx) {
        const { productId, productName, quantity, price } = ctx.request.body

        if (!productId) return

        const whereOpt = {}

        try {
            productId && Object.assign(whereOpt, { productId })
            productName && Object.assign(whereOpt, { productName })
            quantity && Object.assign(whereOpt, { quantity })
            price && Object.assign(whereOpt, { price })

            const res = await updateGoodsService(whereOpt)

            ctx.body = {
                code: 0,
                message: 'success',
                data: res
            }

        } catch (error) {
            ctx.app.emit('error', userRegisterError, ctx)
        }
    }

    // 查询
    async getGoods(ctx) {
        // 1.获取数据 （注意一定传的要是JSON结构才能对request.body解构）
        const { productId, productName, quantity, price, pageCurrent, pageSize } = ctx.query

        const params = {}
        // 短路运算
        productId && Object.assign(params, { productId })  // 不为空则添加到whereOpt中
        productName && Object.assign(params, { productName })  // 不为空则添加到whereOpt中
        quantity && Object.assign(params, { quantity })  // 不为空则添加到whereOpt中
        price && Object.assign(params, { price })  // 不为空则添加到whereOpt中
        pageCurrent && Object.assign(params, { pageCurrent: parseInt(pageCurrent) })  // 不为空则添加到whereOpt中
        pageSize && Object.assign(params, { pageSize: parseInt(pageSize) })  // 不为空则添加到whereOpt中

        // 2.操作数据库
        try {
            // 调用service层最好加try catch
            const { data, total, pageSize, pageCurrent } = await getGoodsService(params)
            // 3.返回给客户端
            ctx.body = {
                code: 0,
                message: 'success',
                data: {
                    data,
                    total,
                    pageSize,
                    pageCurrent
                }
            }

        } catch (err) {
            console.log(err)
            ctx.app.emit('error', userRegisterError, ctx)
        }
    }


}

module.exports = new GoodsController()